¿Qué diferencias prácticas hay entre `canActivate`, `canActivateChild`, `canMatch` y un guard funcional?
¿Qué diferencias prácticas hay entre `canActivate`, `canActivateChild`, `canMatch` y un guard funcional? en Angular: criterios sobre enrutamiento y guards, e...
Detrás de "¿Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional?" suele haber una tensión real en Angular entre enrutamiento y guards.
En un nivel intermedio interesa ver si colocas bien los límites de "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional", justificas por qué eliges ese patrón y explicas cómo lo mantendrías legible para el equipo.
Qué evalúa el entrevistador
- Si distingues qué parte de "Qué diferencias prácticas hay entre
canActivate,canActivateChild,canMatchy un guard funcional" pertenece a enrutamiento y cuál debería resolverse en guards. - Si conviertes la respuesta en criterios observables: límites claros, impacto en el mantenimiento y forma de detectar regresiones.
- Si modelas bien contratos, errores, reintentos, autenticación o cancelación sin dejar huecos entre capas.
Respuesta sólida
- Aterriza el contrato: qué entra, qué sale, qué errores se traducen, qué tiempos esperas y qué política sigues para cancelar o reintentar.
- Explica dónde pondrías la lógica de transformación para no propagar dependencias externas por todo el sistema.
- Incluye cómo protegerías el flujo ante respuestas parciales, estados inconsistentes y credenciales mal gestionadas.
Compromisos y errores comunes
- Acoplar directamente la UI o el dominio al formato exacto del proveedor externo multiplica el coste de cambio.
- Los reintentos ciegos, la traducción pobre de errores y la ausencia de timeouts suelen empeorar la incidencia en lugar de contenerla.
Ejemplo de código
Un ejemplo pequeño ayuda a ver dónde colocarías la lógica de enrutamiento en "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional" y qué parte dejarías derivada o encapsulada.
import { HttpInterceptorFn } from '@angular/common/http';
import { catchError, throwError } from 'rxjs';
export const authInterceptor: HttpInterceptorFn = (request, next) => {
const authenticatedRequest = request.clone({
setHeaders: { Authorization: 'Bearer token-demo' },
});
return next(authenticatedRequest).pipe(
catchError((error) => {
console.error('Error HTTP', error.status);
return throwError(() => error);
}),
);
};
Lo importante no es la API concreta, sino que la solución hace visible la fuente de verdad, el tratamiento del error y el punto exacto donde enrutamiento se sincroniza con guards dentro de "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional" en Angular.
Ejemplo o caso real
Un caso creíble para "¿Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional?" aparece cuando una funcionalidad de Angular mezcla enrutamiento con guards y el equipo empieza a tocar demasiados puntos para un cambio pequeño. Ahí conviene probar la solución sobre una pantalla o flujo acotado, medir si reduce fricción y solo después extender el patrón.
Frase corta de entrevista
Si una decisión de Angular no mejora claridad, coste de cambio o fiabilidad, probablemente aún no merece existir.
Marcarla como leída actualiza tu progreso.